﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Follow.Business;
using System.Windows.Forms;

namespace Follow.Cadastros
{
    public partial class Visita : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
             if (Session["idUsuario"] == null)
            {
                Response.Redirect("../Default.aspx");
            }
            else
            {
                Common.ValidaPermissoes valida = new Common.ValidaPermissoes();
                bool possuiPermissao = valida.validaPermissaoPorTela("Visita", Convert.ToInt32(Session["idGrupoUsuario"]));

                if (possuiPermissao == false)
                {
                    Response.Redirect("../permissaoNegada.aspx");
                }

                if (Request["Msg"] != null)
                {
                    divMsg1.Visible = true;
                    divMsg1.Attributes["class"] = "isa_info";
                    lblMsg1.Text = Request["Msg"].ToString();
                }
                this.PopulaVisitas();
            }
        }

        private void PopulaVisitas()
        {
            VisitaBO bo = new VisitaBO();
            gvVisitas.DataSource = bo.findAll();
            gvVisitas.DataBind();
        }


        private void PopulaFuncionarios()
        {
            FuncionarioBO bo = new FuncionarioBO();
            ddlFuncionario.DataSource = bo.findByName("", true);
            ddlFuncionario.DataValueField = "idfuncionario";
            ddlFuncionario.DataTextField = "nome";
            ddlFuncionario.DataBind();
        }

        private void PopulaClientes()
        {
            ClienteBO bo = new ClienteBO();
            ddlCliente.DataSource = bo.findAll();
            ddlCliente.DataValueField = "idcliente";
            ddlCliente.DataTextField = "nome";
            ddlCliente.DataBind();
        }


        protected void btnPesquisa_Click(object sender, EventArgs e)
        {
            VisitaBO bo = new VisitaBO();
            gvVisitas.DataSource = bo.findByNomeFuncionario(txtPesquisa.Text);
            gvVisitas.DataBind();
            divMsg1.Visible = false;
        }

        protected void btnIncluir_Click(object sender, EventArgs e)
        {
            
            this.PopulaClientes();
            this.PopulaFuncionarios();
            lblTitulo2.Text = "Incluir Visita";
            mvVisitas.ActiveViewIndex = 1;
            divMsg2.Visible = false;
        }

        protected void btnSalvar_Click(object sender, EventArgs e)
        {
              try
            {
                Model.Visita v = new Model.Visita();
                VisitaBO bo = new VisitaBO();
                if (IDVisita.Value != "")
                {
                    v.IDVisita = Int32.Parse(IDVisita.Value);

                }
                v.IDFuncionarioVisita = Convert.ToInt32(ddlFuncionario.SelectedValue);
                v.IDClienteVisita = Convert.ToInt32(ddlCliente.SelectedValue);
                v.DataVisita = Convert.ToDateTime(txtDataVisita.Text);
                v.ObsVisita = txtObservacao.Text;
                bo.save(v, Convert.ToInt32(Session["idUsuario"]));
                mvVisitas.ActiveViewIndex = 0;
                divMsg1.Visible = true;
                divMsg1.Attributes["class"] = "isa_success";
                lblMsg1.Text = "Visita salva com sucesso!";
            }
            catch (Exception ex)
            {
                divMsg2.Visible = true;
                if (ex.Message.IndexOf("duplicate") > -1)
                {
                    divMsg2.Attributes["class"] = "isa_warning";
                    lblMsg2.Text = "Visita já agendada para esse funcionário na mesma data.";
                }
                else
                {
                    divMsg2.Attributes["class"] = "isa_error";
                    lblMsg2.Text = "Erro: " + ex.Message;
                }
            }
        }
 

        protected void btnVoltar_Click(object sender, EventArgs e)
        {
            mvVisitas.ActiveViewIndex = 0;
            divMsg1.Visible = false;
        }

        protected void gvVisitas_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName.Equals("Editar"))
            {
                Int32 id = Convert.ToInt32(this.gvVisitas.DataKeys[Convert.ToInt32(e.CommandArgument)].Value);

                if (id != null)
                {
                    if (id > 0)
                    {
                        VisitaBO bo = new VisitaBO();
                        Model.Visita v = bo.load(id);
                        ddlFuncionario.SelectedValue = v.IDFuncionarioVisita.ToString();
                        ddlCliente.SelectedValue = v.IDClienteVisita.ToString();
                        txtDataVisita.Text = Convert.ToString(v.DataVisita);
                        txtObservacao.Text = v.ObsVisita.ToString();
                        IDVisita.Value = v.IDVisita.ToString();
                        lblTitulo2.Text = "Alterar Visita";

                        PopulaFuncionarios();
                        PopulaClientes();

                        mvVisitas.ActiveViewIndex = 1;
                        divMsg2.Visible = false;
                    }
                }


            }
            else if (e.CommandName.Equals("Excluir"))
            {
                if (System.Windows.Forms.MessageBox.Show("Tem certeza que deseja excluir?", "Excluir", MessageBoxButtons.OKCancel,
                    MessageBoxIcon.Question, MessageBoxDefaultButton.Button1, MessageBoxOptions.ServiceNotification) ==
                    System.Windows.Forms.DialogResult.OK)
                {
                    divMsg1.Visible = true;
                    Int32 id = 0;
                    try
                    {
                        id = Convert.ToInt32(this.gvVisitas.DataKeys[Convert.ToInt32(e.CommandArgument)].Value);
                    }
                    catch (Exception ex)
                    {
                        divMsg1.Attributes["class"] = "isa_error";
                        lblMsg1.Text = "Erro: " + ex.Message;
                        return;
                    }
                    VisitaBO bo = new VisitaBO();
                    try
                    {
                        bo.delete(id, Convert.ToInt32(Session["idUsuario"]));
                        PopulaVisitas();
                        mvVisitas.ActiveViewIndex = 0;
                        divMsg1.Attributes["class"] = "isa_success";
                        lblMsg1.Text = "Visita excluída com sucesso!";
                    }
                    catch (Exception ex)
                    {
                        divMsg1.Attributes["class"] = "isa_error";
                        lblMsg1.Text = "Erro: " + ex.Message;
                    }
                }
            }
        }

        protected void gvVisitas_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        protected void gvVisitas_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvVisitas.PageIndex = e.NewPageIndex;
            gvVisitas.DataBind();
            PopulaVisitas();
        }       
    }
}